from kaffe.tensorflow import Network

class ResNet50(Network):
    def setup(self):
        (self.feed('data')
             .conv(7, 7, 64, 2, 2, relu=False, name='conv1')
             .batch_normalization(relu=True, name='bn_conv1')
             .max_pool(3, 3, 2, 2, name='pool1')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch1')
             .batch_normalization(name='bn2a_branch1'))

        (self.feed('pool1')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2a_branch2a')
             .batch_normalization(relu=True, name='bn2a_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2a_branch2b')
             .batch_normalization(relu=True, name='bn2a_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch2c')
             .batch_normalization(name='bn2a_branch2c'))

        (self.feed('bn2a_branch1',
                   'bn2a_branch2c')
             .add(name='res2a')
             .relu(name='res2a_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2b_branch2a')
             .batch_normalization(relu=True, name='bn2b_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2b_branch2b')
             .batch_normalization(relu=True, name='bn2b_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2b_branch2c')
             .batch_normalization(name='bn2b_branch2c'))

        (self.feed('res2a_relu',
                   'bn2b_branch2c')
             .add(name='res2b')
             .relu(name='res2b_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2c_branch2a')
             .batch_normalization(relu=True, name='bn2c_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2c_branch2b')
             .batch_normalization(relu=True, name='bn2c_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2c_branch2c')
             .batch_normalization(name='bn2c_branch2c'))

        (self.feed('res2b_relu',
                   'bn2c_branch2c')
             .add(name='res2c')
             .relu(name='res2c_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res3a_branch1')
             .batch_normalization(name='bn3a_branch1'))

        (self.feed('res2c_relu')
             .conv(1, 1, 128, 2, 2, biased=False, relu=False, name='res3a_branch2a')
             .batch_normalization(relu=True, name='bn3a_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3a_branch2b')
             .batch_normalization(relu=True, name='bn3a_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3a_branch2c')
             .batch_normalization(name='bn3a_branch2c'))

        (self.feed('bn3a_branch1',
                   'bn3a_branch2c')
             .add(name='res3a')
             .relu(name='res3a_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b_branch2a')
             .batch_normalization(relu=True, name='bn3b_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b_branch2b')
             .batch_normalization(relu=True, name='bn3b_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b_branch2c')
             .batch_normalization(name='bn3b_branch2c'))

        (self.feed('res3a_relu',
                   'bn3b_branch2c')
             .add(name='res3b')
             .relu(name='res3b_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3c_branch2a')
             .batch_normalization(relu=True, name='bn3c_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3c_branch2b')
             .batch_normalization(relu=True, name='bn3c_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3c_branch2c')
             .batch_normalization(name='bn3c_branch2c'))

        (self.feed('res3b_relu',
                   'bn3c_branch2c')
             .add(name='res3c')
             .relu(name='res3c_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3d_branch2a')
             .batch_normalization(relu=True, name='bn3d_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3d_branch2b')
             .batch_normalization(relu=True, name='bn3d_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3d_branch2c')
             .batch_normalization(name='bn3d_branch2c'))

        (self.feed('res3c_relu',
                   'bn3d_branch2c')
             .add(name='res3d')
             .relu(name='res3d_relu')
             .conv(1, 1, 1024, 2, 2, biased=False, relu=False, name='res4a_branch1')
             .batch_normalization(name='bn4a_branch1'))

        (self.feed('res3d_relu')
             .conv(1, 1, 256, 2, 2, biased=False, relu=False, name='res4a_branch2a')
             .batch_normalization(relu=True, name='bn4a_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4a_branch2b')
             .batch_normalization(relu=True, name='bn4a_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4a_branch2c')
             .batch_normalization(name='bn4a_branch2c'))

        (self.feed('bn4a_branch1',
                   'bn4a_branch2c')
             .add(name='res4a')
             .relu(name='res4a_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b_branch2a')
             .batch_normalization(relu=True, name='bn4b_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b_branch2b')
             .batch_normalization(relu=True, name='bn4b_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b_branch2c')
             .batch_normalization(name='bn4b_branch2c'))

        (self.feed('res4a_relu',
                   'bn4b_branch2c')
             .add(name='res4b')
             .relu(name='res4b_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4c_branch2a')
             .batch_normalization(relu=True, name='bn4c_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4c_branch2b')
             .batch_normalization(relu=True, name='bn4c_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4c_branch2c')
             .batch_normalization(name='bn4c_branch2c'))

        (self.feed('res4b_relu',
                   'bn4c_branch2c')
             .add(name='res4c')
             .relu(name='res4c_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4d_branch2a')
             .batch_normalization(relu=True, name='bn4d_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4d_branch2b')
             .batch_normalization(relu=True, name='bn4d_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4d_branch2c')
             .batch_normalization(name='bn4d_branch2c'))

        (self.feed('res4c_relu',
                   'bn4d_branch2c')
             .add(name='res4d')
             .relu(name='res4d_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4e_branch2a')
             .batch_normalization(relu=True, name='bn4e_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4e_branch2b')
             .batch_normalization(relu=True, name='bn4e_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4e_branch2c')
             .batch_normalization(name='bn4e_branch2c'))

        (self.feed('res4d_relu',
                   'bn4e_branch2c')
             .add(name='res4e')
             .relu(name='res4e_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4f_branch2a')
             .batch_normalization(relu=True, name='bn4f_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4f_branch2b')
             .batch_normalization(relu=True, name='bn4f_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4f_branch2c')
             .batch_normalization(name='bn4f_branch2c'))

        (self.feed('res4e_relu',
                   'bn4f_branch2c')
             .add(name='res4f')
             .relu(name='res4f_relu')
             .conv(1, 1, 2048, 2, 2, biased=False, relu=False, name='res5a_branch1')
             .batch_normalization(name='bn5a_branch1'))

        (self.feed('res4f_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res5a_branch2a')
             .batch_normalization(relu=True, name='bn5a_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5a_branch2b')
             .batch_normalization(relu=True, name='bn5a_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5a_branch2c')
             .batch_normalization(name='bn5a_branch2c'))

        (self.feed('bn5a_branch1',
                   'bn5a_branch2c')
             .add(name='res5a')
             .relu(name='res5a_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5b_branch2a')
             .batch_normalization(relu=True, name='bn5b_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5b_branch2b')
             .batch_normalization(relu=True, name='bn5b_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5b_branch2c')
             .batch_normalization(name='bn5b_branch2c'))

        (self.feed('res5a_relu',
                   'bn5b_branch2c')
             .add(name='res5b')
             .relu(name='res5b_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5c_branch2a')
             .batch_normalization(relu=True, name='bn5c_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5c_branch2b')
             .batch_normalization(relu=True, name='bn5c_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5c_branch2c')
             .batch_normalization(name='bn5c_branch2c'))

        (self.feed('res5b_relu',
                   'bn5c_branch2c')
             .add(name='res5c')
             .relu(name='res5c_relu')
             .avg_pool(7, 7, 1, 1, padding='VALID', name='pool5')
             .fc(1000, relu=False, name='fc1000')
             .softmax(name='prob'))


class ResNet101(Network):
    def setup(self):
        (self.feed('data')
             .conv(7, 7, 64, 2, 2, biased=False, relu=False, name='conv1')
             .batch_normalization(relu=True, name='bn_conv1')
             .max_pool(3, 3, 2, 2, name='pool1')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch1')
             .batch_normalization(name='bn2a_branch1'))

        (self.feed('pool1')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2a_branch2a')
             .batch_normalization(relu=True, name='bn2a_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2a_branch2b')
             .batch_normalization(relu=True, name='bn2a_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch2c')
             .batch_normalization(name='bn2a_branch2c'))

        (self.feed('bn2a_branch1',
                   'bn2a_branch2c')
             .add(name='res2a')
             .relu(name='res2a_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2b_branch2a')
             .batch_normalization(relu=True, name='bn2b_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2b_branch2b')
             .batch_normalization(relu=True, name='bn2b_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2b_branch2c')
             .batch_normalization(name='bn2b_branch2c'))

        (self.feed('res2a_relu',
                   'bn2b_branch2c')
             .add(name='res2b')
             .relu(name='res2b_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2c_branch2a')
             .batch_normalization(relu=True, name='bn2c_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2c_branch2b')
             .batch_normalization(relu=True, name='bn2c_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2c_branch2c')
             .batch_normalization(name='bn2c_branch2c'))

        (self.feed('res2b_relu',
                   'bn2c_branch2c')
             .add(name='res2c')
             .relu(name='res2c_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res3a_branch1')
             .batch_normalization(name='bn3a_branch1'))

        (self.feed('res2c_relu')
             .conv(1, 1, 128, 2, 2, biased=False, relu=False, name='res3a_branch2a')
             .batch_normalization(relu=True, name='bn3a_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3a_branch2b')
             .batch_normalization(relu=True, name='bn3a_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3a_branch2c')
             .batch_normalization(name='bn3a_branch2c'))

        (self.feed('bn3a_branch1',
                   'bn3a_branch2c')
             .add(name='res3a')
             .relu(name='res3a_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b1_branch2a')
             .batch_normalization(relu=True, name='bn3b1_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b1_branch2b')
             .batch_normalization(relu=True, name='bn3b1_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b1_branch2c')
             .batch_normalization(name='bn3b1_branch2c'))

        (self.feed('res3a_relu',
                   'bn3b1_branch2c')
             .add(name='res3b1')
             .relu(name='res3b1_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b2_branch2a')
             .batch_normalization(relu=True, name='bn3b2_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b2_branch2b')
             .batch_normalization(relu=True, name='bn3b2_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b2_branch2c')
             .batch_normalization(name='bn3b2_branch2c'))

        (self.feed('res3b1_relu',
                   'bn3b2_branch2c')
             .add(name='res3b2')
             .relu(name='res3b2_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b3_branch2a')
             .batch_normalization(relu=True, name='bn3b3_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b3_branch2b')
             .batch_normalization(relu=True, name='bn3b3_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b3_branch2c')
             .batch_normalization(name='bn3b3_branch2c'))

        (self.feed('res3b2_relu',
                   'bn3b3_branch2c')
             .add(name='res3b3')
             .relu(name='res3b3_relu')
             .conv(1, 1, 1024, 2, 2, biased=False, relu=False, name='res4a_branch1')
             .batch_normalization(name='bn4a_branch1'))

        (self.feed('res3b3_relu')
             .conv(1, 1, 256, 2, 2, biased=False, relu=False, name='res4a_branch2a')
             .batch_normalization(relu=True, name='bn4a_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4a_branch2b')
             .batch_normalization(relu=True, name='bn4a_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4a_branch2c')
             .batch_normalization(name='bn4a_branch2c'))

        (self.feed('bn4a_branch1',
                   'bn4a_branch2c')
             .add(name='res4a')
             .relu(name='res4a_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b1_branch2a')
             .batch_normalization(relu=True, name='bn4b1_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b1_branch2b')
             .batch_normalization(relu=True, name='bn4b1_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b1_branch2c')
             .batch_normalization(name='bn4b1_branch2c'))

        (self.feed('res4a_relu',
                   'bn4b1_branch2c')
             .add(name='res4b1')
             .relu(name='res4b1_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b2_branch2a')
             .batch_normalization(relu=True, name='bn4b2_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b2_branch2b')
             .batch_normalization(relu=True, name='bn4b2_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b2_branch2c')
             .batch_normalization(name='bn4b2_branch2c'))

        (self.feed('res4b1_relu',
                   'bn4b2_branch2c')
             .add(name='res4b2')
             .relu(name='res4b2_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b3_branch2a')
             .batch_normalization(relu=True, name='bn4b3_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b3_branch2b')
             .batch_normalization(relu=True, name='bn4b3_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b3_branch2c')
             .batch_normalization(name='bn4b3_branch2c'))

        (self.feed('res4b2_relu',
                   'bn4b3_branch2c')
             .add(name='res4b3')
             .relu(name='res4b3_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b4_branch2a')
             .batch_normalization(relu=True, name='bn4b4_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b4_branch2b')
             .batch_normalization(relu=True, name='bn4b4_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b4_branch2c')
             .batch_normalization(name='bn4b4_branch2c'))

        (self.feed('res4b3_relu',
                   'bn4b4_branch2c')
             .add(name='res4b4')
             .relu(name='res4b4_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b5_branch2a')
             .batch_normalization(relu=True, name='bn4b5_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b5_branch2b')
             .batch_normalization(relu=True, name='bn4b5_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b5_branch2c')
             .batch_normalization(name='bn4b5_branch2c'))

        (self.feed('res4b4_relu',
                   'bn4b5_branch2c')
             .add(name='res4b5')
             .relu(name='res4b5_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b6_branch2a')
             .batch_normalization(relu=True, name='bn4b6_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b6_branch2b')
             .batch_normalization(relu=True, name='bn4b6_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b6_branch2c')
             .batch_normalization(name='bn4b6_branch2c'))

        (self.feed('res4b5_relu',
                   'bn4b6_branch2c')
             .add(name='res4b6')
             .relu(name='res4b6_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b7_branch2a')
             .batch_normalization(relu=True, name='bn4b7_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b7_branch2b')
             .batch_normalization(relu=True, name='bn4b7_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b7_branch2c')
             .batch_normalization(name='bn4b7_branch2c'))

        (self.feed('res4b6_relu',
                   'bn4b7_branch2c')
             .add(name='res4b7')
             .relu(name='res4b7_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b8_branch2a')
             .batch_normalization(relu=True, name='bn4b8_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b8_branch2b')
             .batch_normalization(relu=True, name='bn4b8_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b8_branch2c')
             .batch_normalization(name='bn4b8_branch2c'))

        (self.feed('res4b7_relu',
                   'bn4b8_branch2c')
             .add(name='res4b8')
             .relu(name='res4b8_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b9_branch2a')
             .batch_normalization(relu=True, name='bn4b9_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b9_branch2b')
             .batch_normalization(relu=True, name='bn4b9_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b9_branch2c')
             .batch_normalization(name='bn4b9_branch2c'))

        (self.feed('res4b8_relu',
                   'bn4b9_branch2c')
             .add(name='res4b9')
             .relu(name='res4b9_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b10_branch2a')
             .batch_normalization(relu=True, name='bn4b10_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b10_branch2b')
             .batch_normalization(relu=True, name='bn4b10_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b10_branch2c')
             .batch_normalization(name='bn4b10_branch2c'))

        (self.feed('res4b9_relu',
                   'bn4b10_branch2c')
             .add(name='res4b10')
             .relu(name='res4b10_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b11_branch2a')
             .batch_normalization(relu=True, name='bn4b11_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b11_branch2b')
             .batch_normalization(relu=True, name='bn4b11_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b11_branch2c')
             .batch_normalization(name='bn4b11_branch2c'))

        (self.feed('res4b10_relu',
                   'bn4b11_branch2c')
             .add(name='res4b11')
             .relu(name='res4b11_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b12_branch2a')
             .batch_normalization(relu=True, name='bn4b12_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b12_branch2b')
             .batch_normalization(relu=True, name='bn4b12_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b12_branch2c')
             .batch_normalization(name='bn4b12_branch2c'))

        (self.feed('res4b11_relu',
                   'bn4b12_branch2c')
             .add(name='res4b12')
             .relu(name='res4b12_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b13_branch2a')
             .batch_normalization(relu=True, name='bn4b13_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b13_branch2b')
             .batch_normalization(relu=True, name='bn4b13_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b13_branch2c')
             .batch_normalization(name='bn4b13_branch2c'))

        (self.feed('res4b12_relu',
                   'bn4b13_branch2c')
             .add(name='res4b13')
             .relu(name='res4b13_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b14_branch2a')
             .batch_normalization(relu=True, name='bn4b14_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b14_branch2b')
             .batch_normalization(relu=True, name='bn4b14_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b14_branch2c')
             .batch_normalization(name='bn4b14_branch2c'))

        (self.feed('res4b13_relu',
                   'bn4b14_branch2c')
             .add(name='res4b14')
             .relu(name='res4b14_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b15_branch2a')
             .batch_normalization(relu=True, name='bn4b15_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b15_branch2b')
             .batch_normalization(relu=True, name='bn4b15_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b15_branch2c')
             .batch_normalization(name='bn4b15_branch2c'))

        (self.feed('res4b14_relu',
                   'bn4b15_branch2c')
             .add(name='res4b15')
             .relu(name='res4b15_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b16_branch2a')
             .batch_normalization(relu=True, name='bn4b16_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b16_branch2b')
             .batch_normalization(relu=True, name='bn4b16_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b16_branch2c')
             .batch_normalization(name='bn4b16_branch2c'))

        (self.feed('res4b15_relu',
                   'bn4b16_branch2c')
             .add(name='res4b16')
             .relu(name='res4b16_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b17_branch2a')
             .batch_normalization(relu=True, name='bn4b17_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b17_branch2b')
             .batch_normalization(relu=True, name='bn4b17_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b17_branch2c')
             .batch_normalization(name='bn4b17_branch2c'))

        (self.feed('res4b16_relu',
                   'bn4b17_branch2c')
             .add(name='res4b17')
             .relu(name='res4b17_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b18_branch2a')
             .batch_normalization(relu=True, name='bn4b18_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b18_branch2b')
             .batch_normalization(relu=True, name='bn4b18_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b18_branch2c')
             .batch_normalization(name='bn4b18_branch2c'))

        (self.feed('res4b17_relu',
                   'bn4b18_branch2c')
             .add(name='res4b18')
             .relu(name='res4b18_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b19_branch2a')
             .batch_normalization(relu=True, name='bn4b19_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b19_branch2b')
             .batch_normalization(relu=True, name='bn4b19_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b19_branch2c')
             .batch_normalization(name='bn4b19_branch2c'))

        (self.feed('res4b18_relu',
                   'bn4b19_branch2c')
             .add(name='res4b19')
             .relu(name='res4b19_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b20_branch2a')
             .batch_normalization(relu=True, name='bn4b20_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b20_branch2b')
             .batch_normalization(relu=True, name='bn4b20_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b20_branch2c')
             .batch_normalization(name='bn4b20_branch2c'))

        (self.feed('res4b19_relu',
                   'bn4b20_branch2c')
             .add(name='res4b20')
             .relu(name='res4b20_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b21_branch2a')
             .batch_normalization(relu=True, name='bn4b21_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b21_branch2b')
             .batch_normalization(relu=True, name='bn4b21_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b21_branch2c')
             .batch_normalization(name='bn4b21_branch2c'))

        (self.feed('res4b20_relu',
                   'bn4b21_branch2c')
             .add(name='res4b21')
             .relu(name='res4b21_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b22_branch2a')
             .batch_normalization(relu=True, name='bn4b22_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b22_branch2b')
             .batch_normalization(relu=True, name='bn4b22_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b22_branch2c')
             .batch_normalization(name='bn4b22_branch2c'))

        (self.feed('res4b21_relu',
                   'bn4b22_branch2c')
             .add(name='res4b22')
             .relu(name='res4b22_relu')
             .conv(1, 1, 2048, 2, 2, biased=False, relu=False, name='res5a_branch1')
             .batch_normalization(name='bn5a_branch1'))

        (self.feed('res4b22_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res5a_branch2a')
             .batch_normalization(relu=True, name='bn5a_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5a_branch2b')
             .batch_normalization(relu=True, name='bn5a_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5a_branch2c')
             .batch_normalization(name='bn5a_branch2c'))

        (self.feed('bn5a_branch1',
                   'bn5a_branch2c')
             .add(name='res5a')
             .relu(name='res5a_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5b_branch2a')
             .batch_normalization(relu=True, name='bn5b_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5b_branch2b')
             .batch_normalization(relu=True, name='bn5b_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5b_branch2c')
             .batch_normalization(name='bn5b_branch2c'))

        (self.feed('res5a_relu',
                   'bn5b_branch2c')
             .add(name='res5b')
             .relu(name='res5b_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5c_branch2a')
             .batch_normalization(relu=True, name='bn5c_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5c_branch2b')
             .batch_normalization(relu=True, name='bn5c_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5c_branch2c')
             .batch_normalization(name='bn5c_branch2c'))

        (self.feed('res5b_relu',
                   'bn5c_branch2c')
             .add(name='res5c')
             .relu(name='res5c_relu')
             .avg_pool(7, 7, 1, 1, padding='VALID', name='pool5')
             .fc(1000, relu=False, name='fc1000')
             .softmax(name='prob'))


class ResNet152(Network):
    def setup(self):
        (self.feed('data')
             .conv(7, 7, 64, 2, 2, biased=False, relu=False, name='conv1')
             .batch_normalization(relu=True, name='bn_conv1')
             .max_pool(3, 3, 2, 2, name='pool1')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch1')
             .batch_normalization(name='bn2a_branch1'))

        (self.feed('pool1')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2a_branch2a')
             .batch_normalization(relu=True, name='bn2a_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2a_branch2b')
             .batch_normalization(relu=True, name='bn2a_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2a_branch2c')
             .batch_normalization(name='bn2a_branch2c'))

        (self.feed('bn2a_branch1',
                   'bn2a_branch2c')
             .add(name='res2a')
             .relu(name='res2a_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2b_branch2a')
             .batch_normalization(relu=True, name='bn2b_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2b_branch2b')
             .batch_normalization(relu=True, name='bn2b_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2b_branch2c')
             .batch_normalization(name='bn2b_branch2c'))

        (self.feed('res2a_relu',
                   'bn2b_branch2c')
             .add(name='res2b')
             .relu(name='res2b_relu')
             .conv(1, 1, 64, 1, 1, biased=False, relu=False, name='res2c_branch2a')
             .batch_normalization(relu=True, name='bn2c_branch2a')
             .conv(3, 3, 64, 1, 1, biased=False, relu=False, name='res2c_branch2b')
             .batch_normalization(relu=True, name='bn2c_branch2b')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res2c_branch2c')
             .batch_normalization(name='bn2c_branch2c'))

        (self.feed('res2b_relu',
                   'bn2c_branch2c')
             .add(name='res2c')
             .relu(name='res2c_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res3a_branch1')
             .batch_normalization(name='bn3a_branch1'))

        (self.feed('res2c_relu')
             .conv(1, 1, 128, 2, 2, biased=False, relu=False, name='res3a_branch2a')
             .batch_normalization(relu=True, name='bn3a_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3a_branch2b')
             .batch_normalization(relu=True, name='bn3a_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3a_branch2c')
             .batch_normalization(name='bn3a_branch2c'))

        (self.feed('bn3a_branch1',
                   'bn3a_branch2c')
             .add(name='res3a')
             .relu(name='res3a_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b1_branch2a')
             .batch_normalization(relu=True, name='bn3b1_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b1_branch2b')
             .batch_normalization(relu=True, name='bn3b1_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b1_branch2c')
             .batch_normalization(name='bn3b1_branch2c'))

        (self.feed('res3a_relu',
                   'bn3b1_branch2c')
             .add(name='res3b1')
             .relu(name='res3b1_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b2_branch2a')
             .batch_normalization(relu=True, name='bn3b2_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b2_branch2b')
             .batch_normalization(relu=True, name='bn3b2_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b2_branch2c')
             .batch_normalization(name='bn3b2_branch2c'))

        (self.feed('res3b1_relu',
                   'bn3b2_branch2c')
             .add(name='res3b2')
             .relu(name='res3b2_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b3_branch2a')
             .batch_normalization(relu=True, name='bn3b3_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b3_branch2b')
             .batch_normalization(relu=True, name='bn3b3_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b3_branch2c')
             .batch_normalization(name='bn3b3_branch2c'))

        (self.feed('res3b2_relu',
                   'bn3b3_branch2c')
             .add(name='res3b3')
             .relu(name='res3b3_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b4_branch2a')
             .batch_normalization(relu=True, name='bn3b4_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b4_branch2b')
             .batch_normalization(relu=True, name='bn3b4_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b4_branch2c')
             .batch_normalization(name='bn3b4_branch2c'))

        (self.feed('res3b3_relu',
                   'bn3b4_branch2c')
             .add(name='res3b4')
             .relu(name='res3b4_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b5_branch2a')
             .batch_normalization(relu=True, name='bn3b5_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b5_branch2b')
             .batch_normalization(relu=True, name='bn3b5_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b5_branch2c')
             .batch_normalization(name='bn3b5_branch2c'))

        (self.feed('res3b4_relu',
                   'bn3b5_branch2c')
             .add(name='res3b5')
             .relu(name='res3b5_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b6_branch2a')
             .batch_normalization(relu=True, name='bn3b6_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b6_branch2b')
             .batch_normalization(relu=True, name='bn3b6_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b6_branch2c')
             .batch_normalization(name='bn3b6_branch2c'))

        (self.feed('res3b5_relu',
                   'bn3b6_branch2c')
             .add(name='res3b6')
             .relu(name='res3b6_relu')
             .conv(1, 1, 128, 1, 1, biased=False, relu=False, name='res3b7_branch2a')
             .batch_normalization(relu=True, name='bn3b7_branch2a')
             .conv(3, 3, 128, 1, 1, biased=False, relu=False, name='res3b7_branch2b')
             .batch_normalization(relu=True, name='bn3b7_branch2b')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res3b7_branch2c')
             .batch_normalization(name='bn3b7_branch2c'))

        (self.feed('res3b6_relu',
                   'bn3b7_branch2c')
             .add(name='res3b7')
             .relu(name='res3b7_relu')
             .conv(1, 1, 1024, 2, 2, biased=False, relu=False, name='res4a_branch1')
             .batch_normalization(name='bn4a_branch1'))

        (self.feed('res3b7_relu')
             .conv(1, 1, 256, 2, 2, biased=False, relu=False, name='res4a_branch2a')
             .batch_normalization(relu=True, name='bn4a_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4a_branch2b')
             .batch_normalization(relu=True, name='bn4a_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4a_branch2c')
             .batch_normalization(name='bn4a_branch2c'))

        (self.feed('bn4a_branch1',
                   'bn4a_branch2c')
             .add(name='res4a')
             .relu(name='res4a_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b1_branch2a')
             .batch_normalization(relu=True, name='bn4b1_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b1_branch2b')
             .batch_normalization(relu=True, name='bn4b1_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b1_branch2c')
             .batch_normalization(name='bn4b1_branch2c'))

        (self.feed('res4a_relu',
                   'bn4b1_branch2c')
             .add(name='res4b1')
             .relu(name='res4b1_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b2_branch2a')
             .batch_normalization(relu=True, name='bn4b2_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b2_branch2b')
             .batch_normalization(relu=True, name='bn4b2_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b2_branch2c')
             .batch_normalization(name='bn4b2_branch2c'))

        (self.feed('res4b1_relu',
                   'bn4b2_branch2c')
             .add(name='res4b2')
             .relu(name='res4b2_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b3_branch2a')
             .batch_normalization(relu=True, name='bn4b3_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b3_branch2b')
             .batch_normalization(relu=True, name='bn4b3_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b3_branch2c')
             .batch_normalization(name='bn4b3_branch2c'))

        (self.feed('res4b2_relu',
                   'bn4b3_branch2c')
             .add(name='res4b3')
             .relu(name='res4b3_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b4_branch2a')
             .batch_normalization(relu=True, name='bn4b4_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b4_branch2b')
             .batch_normalization(relu=True, name='bn4b4_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b4_branch2c')
             .batch_normalization(name='bn4b4_branch2c'))

        (self.feed('res4b3_relu',
                   'bn4b4_branch2c')
             .add(name='res4b4')
             .relu(name='res4b4_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b5_branch2a')
             .batch_normalization(relu=True, name='bn4b5_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b5_branch2b')
             .batch_normalization(relu=True, name='bn4b5_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b5_branch2c')
             .batch_normalization(name='bn4b5_branch2c'))

        (self.feed('res4b4_relu',
                   'bn4b5_branch2c')
             .add(name='res4b5')
             .relu(name='res4b5_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b6_branch2a')
             .batch_normalization(relu=True, name='bn4b6_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b6_branch2b')
             .batch_normalization(relu=True, name='bn4b6_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b6_branch2c')
             .batch_normalization(name='bn4b6_branch2c'))

        (self.feed('res4b5_relu',
                   'bn4b6_branch2c')
             .add(name='res4b6')
             .relu(name='res4b6_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b7_branch2a')
             .batch_normalization(relu=True, name='bn4b7_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b7_branch2b')
             .batch_normalization(relu=True, name='bn4b7_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b7_branch2c')
             .batch_normalization(name='bn4b7_branch2c'))

        (self.feed('res4b6_relu',
                   'bn4b7_branch2c')
             .add(name='res4b7')
             .relu(name='res4b7_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b8_branch2a')
             .batch_normalization(relu=True, name='bn4b8_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b8_branch2b')
             .batch_normalization(relu=True, name='bn4b8_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b8_branch2c')
             .batch_normalization(name='bn4b8_branch2c'))

        (self.feed('res4b7_relu',
                   'bn4b8_branch2c')
             .add(name='res4b8')
             .relu(name='res4b8_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b9_branch2a')
             .batch_normalization(relu=True, name='bn4b9_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b9_branch2b')
             .batch_normalization(relu=True, name='bn4b9_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b9_branch2c')
             .batch_normalization(name='bn4b9_branch2c'))

        (self.feed('res4b8_relu',
                   'bn4b9_branch2c')
             .add(name='res4b9')
             .relu(name='res4b9_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b10_branch2a')
             .batch_normalization(relu=True, name='bn4b10_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b10_branch2b')
             .batch_normalization(relu=True, name='bn4b10_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b10_branch2c')
             .batch_normalization(name='bn4b10_branch2c'))

        (self.feed('res4b9_relu',
                   'bn4b10_branch2c')
             .add(name='res4b10')
             .relu(name='res4b10_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b11_branch2a')
             .batch_normalization(relu=True, name='bn4b11_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b11_branch2b')
             .batch_normalization(relu=True, name='bn4b11_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b11_branch2c')
             .batch_normalization(name='bn4b11_branch2c'))

        (self.feed('res4b10_relu',
                   'bn4b11_branch2c')
             .add(name='res4b11')
             .relu(name='res4b11_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b12_branch2a')
             .batch_normalization(relu=True, name='bn4b12_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b12_branch2b')
             .batch_normalization(relu=True, name='bn4b12_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b12_branch2c')
             .batch_normalization(name='bn4b12_branch2c'))

        (self.feed('res4b11_relu',
                   'bn4b12_branch2c')
             .add(name='res4b12')
             .relu(name='res4b12_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b13_branch2a')
             .batch_normalization(relu=True, name='bn4b13_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b13_branch2b')
             .batch_normalization(relu=True, name='bn4b13_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b13_branch2c')
             .batch_normalization(name='bn4b13_branch2c'))

        (self.feed('res4b12_relu',
                   'bn4b13_branch2c')
             .add(name='res4b13')
             .relu(name='res4b13_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b14_branch2a')
             .batch_normalization(relu=True, name='bn4b14_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b14_branch2b')
             .batch_normalization(relu=True, name='bn4b14_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b14_branch2c')
             .batch_normalization(name='bn4b14_branch2c'))

        (self.feed('res4b13_relu',
                   'bn4b14_branch2c')
             .add(name='res4b14')
             .relu(name='res4b14_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b15_branch2a')
             .batch_normalization(relu=True, name='bn4b15_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b15_branch2b')
             .batch_normalization(relu=True, name='bn4b15_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b15_branch2c')
             .batch_normalization(name='bn4b15_branch2c'))

        (self.feed('res4b14_relu',
                   'bn4b15_branch2c')
             .add(name='res4b15')
             .relu(name='res4b15_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b16_branch2a')
             .batch_normalization(relu=True, name='bn4b16_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b16_branch2b')
             .batch_normalization(relu=True, name='bn4b16_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b16_branch2c')
             .batch_normalization(name='bn4b16_branch2c'))

        (self.feed('res4b15_relu',
                   'bn4b16_branch2c')
             .add(name='res4b16')
             .relu(name='res4b16_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b17_branch2a')
             .batch_normalization(relu=True, name='bn4b17_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b17_branch2b')
             .batch_normalization(relu=True, name='bn4b17_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b17_branch2c')
             .batch_normalization(name='bn4b17_branch2c'))

        (self.feed('res4b16_relu',
                   'bn4b17_branch2c')
             .add(name='res4b17')
             .relu(name='res4b17_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b18_branch2a')
             .batch_normalization(relu=True, name='bn4b18_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b18_branch2b')
             .batch_normalization(relu=True, name='bn4b18_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b18_branch2c')
             .batch_normalization(name='bn4b18_branch2c'))

        (self.feed('res4b17_relu',
                   'bn4b18_branch2c')
             .add(name='res4b18')
             .relu(name='res4b18_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b19_branch2a')
             .batch_normalization(relu=True, name='bn4b19_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b19_branch2b')
             .batch_normalization(relu=True, name='bn4b19_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b19_branch2c')
             .batch_normalization(name='bn4b19_branch2c'))

        (self.feed('res4b18_relu',
                   'bn4b19_branch2c')
             .add(name='res4b19')
             .relu(name='res4b19_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b20_branch2a')
             .batch_normalization(relu=True, name='bn4b20_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b20_branch2b')
             .batch_normalization(relu=True, name='bn4b20_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b20_branch2c')
             .batch_normalization(name='bn4b20_branch2c'))

        (self.feed('res4b19_relu',
                   'bn4b20_branch2c')
             .add(name='res4b20')
             .relu(name='res4b20_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b21_branch2a')
             .batch_normalization(relu=True, name='bn4b21_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b21_branch2b')
             .batch_normalization(relu=True, name='bn4b21_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b21_branch2c')
             .batch_normalization(name='bn4b21_branch2c'))

        (self.feed('res4b20_relu',
                   'bn4b21_branch2c')
             .add(name='res4b21')
             .relu(name='res4b21_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b22_branch2a')
             .batch_normalization(relu=True, name='bn4b22_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b22_branch2b')
             .batch_normalization(relu=True, name='bn4b22_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b22_branch2c')
             .batch_normalization(name='bn4b22_branch2c'))

        (self.feed('res4b21_relu',
                   'bn4b22_branch2c')
             .add(name='res4b22')
             .relu(name='res4b22_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b23_branch2a')
             .batch_normalization(relu=True, name='bn4b23_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b23_branch2b')
             .batch_normalization(relu=True, name='bn4b23_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b23_branch2c')
             .batch_normalization(name='bn4b23_branch2c'))

        (self.feed('res4b22_relu',
                   'bn4b23_branch2c')
             .add(name='res4b23')
             .relu(name='res4b23_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b24_branch2a')
             .batch_normalization(relu=True, name='bn4b24_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b24_branch2b')
             .batch_normalization(relu=True, name='bn4b24_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b24_branch2c')
             .batch_normalization(name='bn4b24_branch2c'))

        (self.feed('res4b23_relu',
                   'bn4b24_branch2c')
             .add(name='res4b24')
             .relu(name='res4b24_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b25_branch2a')
             .batch_normalization(relu=True, name='bn4b25_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b25_branch2b')
             .batch_normalization(relu=True, name='bn4b25_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b25_branch2c')
             .batch_normalization(name='bn4b25_branch2c'))

        (self.feed('res4b24_relu',
                   'bn4b25_branch2c')
             .add(name='res4b25')
             .relu(name='res4b25_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b26_branch2a')
             .batch_normalization(relu=True, name='bn4b26_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b26_branch2b')
             .batch_normalization(relu=True, name='bn4b26_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b26_branch2c')
             .batch_normalization(name='bn4b26_branch2c'))

        (self.feed('res4b25_relu',
                   'bn4b26_branch2c')
             .add(name='res4b26')
             .relu(name='res4b26_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b27_branch2a')
             .batch_normalization(relu=True, name='bn4b27_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b27_branch2b')
             .batch_normalization(relu=True, name='bn4b27_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b27_branch2c')
             .batch_normalization(name='bn4b27_branch2c'))

        (self.feed('res4b26_relu',
                   'bn4b27_branch2c')
             .add(name='res4b27')
             .relu(name='res4b27_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b28_branch2a')
             .batch_normalization(relu=True, name='bn4b28_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b28_branch2b')
             .batch_normalization(relu=True, name='bn4b28_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b28_branch2c')
             .batch_normalization(name='bn4b28_branch2c'))

        (self.feed('res4b27_relu',
                   'bn4b28_branch2c')
             .add(name='res4b28')
             .relu(name='res4b28_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b29_branch2a')
             .batch_normalization(relu=True, name='bn4b29_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b29_branch2b')
             .batch_normalization(relu=True, name='bn4b29_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b29_branch2c')
             .batch_normalization(name='bn4b29_branch2c'))

        (self.feed('res4b28_relu',
                   'bn4b29_branch2c')
             .add(name='res4b29')
             .relu(name='res4b29_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b30_branch2a')
             .batch_normalization(relu=True, name='bn4b30_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b30_branch2b')
             .batch_normalization(relu=True, name='bn4b30_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b30_branch2c')
             .batch_normalization(name='bn4b30_branch2c'))

        (self.feed('res4b29_relu',
                   'bn4b30_branch2c')
             .add(name='res4b30')
             .relu(name='res4b30_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b31_branch2a')
             .batch_normalization(relu=True, name='bn4b31_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b31_branch2b')
             .batch_normalization(relu=True, name='bn4b31_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b31_branch2c')
             .batch_normalization(name='bn4b31_branch2c'))

        (self.feed('res4b30_relu',
                   'bn4b31_branch2c')
             .add(name='res4b31')
             .relu(name='res4b31_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b32_branch2a')
             .batch_normalization(relu=True, name='bn4b32_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b32_branch2b')
             .batch_normalization(relu=True, name='bn4b32_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b32_branch2c')
             .batch_normalization(name='bn4b32_branch2c'))

        (self.feed('res4b31_relu',
                   'bn4b32_branch2c')
             .add(name='res4b32')
             .relu(name='res4b32_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b33_branch2a')
             .batch_normalization(relu=True, name='bn4b33_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b33_branch2b')
             .batch_normalization(relu=True, name='bn4b33_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b33_branch2c')
             .batch_normalization(name='bn4b33_branch2c'))

        (self.feed('res4b32_relu',
                   'bn4b33_branch2c')
             .add(name='res4b33')
             .relu(name='res4b33_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b34_branch2a')
             .batch_normalization(relu=True, name='bn4b34_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b34_branch2b')
             .batch_normalization(relu=True, name='bn4b34_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b34_branch2c')
             .batch_normalization(name='bn4b34_branch2c'))

        (self.feed('res4b33_relu',
                   'bn4b34_branch2c')
             .add(name='res4b34')
             .relu(name='res4b34_relu')
             .conv(1, 1, 256, 1, 1, biased=False, relu=False, name='res4b35_branch2a')
             .batch_normalization(relu=True, name='bn4b35_branch2a')
             .conv(3, 3, 256, 1, 1, biased=False, relu=False, name='res4b35_branch2b')
             .batch_normalization(relu=True, name='bn4b35_branch2b')
             .conv(1, 1, 1024, 1, 1, biased=False, relu=False, name='res4b35_branch2c')
             .batch_normalization(name='bn4b35_branch2c'))

        (self.feed('res4b34_relu',
                   'bn4b35_branch2c')
             .add(name='res4b35')
             .relu(name='res4b35_relu')
             .conv(1, 1, 2048, 2, 2, biased=False, relu=False, name='res5a_branch1')
             .batch_normalization(name='bn5a_branch1'))

        (self.feed('res4b35_relu')
             .conv(1, 1, 512, 2, 2, biased=False, relu=False, name='res5a_branch2a')
             .batch_normalization(relu=True, name='bn5a_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5a_branch2b')
             .batch_normalization(relu=True, name='bn5a_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5a_branch2c')
             .batch_normalization(name='bn5a_branch2c'))

        (self.feed('bn5a_branch1',
                   'bn5a_branch2c')
             .add(name='res5a')
             .relu(name='res5a_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5b_branch2a')
             .batch_normalization(relu=True, name='bn5b_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5b_branch2b')
             .batch_normalization(relu=True, name='bn5b_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5b_branch2c')
             .batch_normalization(name='bn5b_branch2c'))

        (self.feed('res5a_relu',
                   'bn5b_branch2c')
             .add(name='res5b')
             .relu(name='res5b_relu')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='res5c_branch2a')
             .batch_normalization(relu=True, name='bn5c_branch2a')
             .conv(3, 3, 512, 1, 1, biased=False, relu=False, name='res5c_branch2b')
             .batch_normalization(relu=True, name='bn5c_branch2b')
             .conv(1, 1, 2048, 1, 1, biased=False, relu=False, name='res5c_branch2c')
             .batch_normalization(name='bn5c_branch2c'))

        (self.feed('res5b_relu',
                   'bn5c_branch2c')
             .add(name='res5c')
             .relu(name='res5c_relu')
             .avg_pool(7, 7, 1, 1, padding='VALID', name='pool5')
             .fc(1000, relu=False, name='fc1000')
             .softmax(name='prob'))
